package view.cursada;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;

import model.Cursada;
import model.Empresa;
import model.Estado_Cursada;
import model.Horario;
import model.Instructor;
import model.comunication.ICursada;
import model.utils.Util;
import view.confirmaciones.DialogTypes;
import view.confirmaciones.ViewDialog;
import view.ventanas_principales.panels.CursadaPanel;

import com.toedter.calendar.JDateChooser;

public class ConsultarCursada extends JDialog {

	private static final long serialVersionUID = 1L;
	private JTextField textCantidadClases;
	private JTextField textHotasSemanales;
	private JTextField textVacantes;
	private JTextField textCupo;
	private JTextField textInstructor;
	private JTextField textEmpresa;
	private JTextField textCurso;
	private JDateChooser dateInicioCursada;
	private JDateChooser dateFinInscripcion;
	private JDateChooser dateInicioInscripcion;
	private JDateChooser dateFinCursada;
	private JList<Object> listHorarios;
	private Cursada cursada;
	private ICursada comunicationCursada;
	private JButton btnSeleccionarInstructor;
	private JTextField textSala;
	private JButton btnSeleccionarSala;
	private JButton btnSeleccionarHorario;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			ConsultarCursada dialog = new ConsultarCursada(null);
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 */
	public ConsultarCursada(Cursada cursada) {
		this.cursada = cursada;
		constructor();
		inicialize();
		loadData();

	}

	private void constructor() {
		this.comunicationCursada = ICursada.getInstance();
	}

	private void inicialize() {
		setBounds(100, 100, 767, 479);
		setLocationRelativeTo(null);
		getContentPane().setLayout(new BorderLayout());

		JPanel panel = new JPanel();
		getContentPane().add(panel, BorderLayout.CENTER);
		panel.setLayout(null);

		JLabel lblFecha = new JLabel("Fecha inicio cursada: ");
		lblFecha.setBounds(22, 14, 157, 14);
		panel.add(lblFecha);

		dateInicioCursada = new JDateChooser();
		dateInicioCursada.setBounds(189, 14, 112, 20);
		panel.add(dateInicioCursada);

		JLabel lblFechaFinCursada = new JLabel("Fecha fin cursada: ");
		lblFechaFinCursada.setBounds(317, 11, 131, 14);
		panel.add(lblFechaFinCursada);

		dateFinCursada = new JDateChooser();
		dateFinCursada.setBounds(458, 14, 104, 20);
		panel.add(dateFinCursada);

		JLabel lblFechaInicioInscripcion = new JLabel("Fecha inicio inscripcion: ");
		lblFechaInicioInscripcion.setBounds(22, 42, 157, 14);
		panel.add(lblFechaInicioInscripcion);

		dateInicioInscripcion = new JDateChooser();
		dateInicioInscripcion.setBounds(189, 39, 112, 20);
		panel.add(dateInicioInscripcion);

		JLabel lblFechaFinInscripcion = new JLabel("Fecha fin inscripcion: ");
		lblFechaFinInscripcion.setBounds(22, 67, 157, 14);
		panel.add(lblFechaFinInscripcion);

		dateFinInscripcion = new JDateChooser();
		dateFinInscripcion.setBounds(189, 67, 112, 20);
		panel.add(dateFinInscripcion);

		JLabel lblNewLabel = new JLabel("Cantidad de clases: ");
		lblNewLabel.setBounds(313, 39, 135, 14);
		panel.add(lblNewLabel);

		textCantidadClases = new JTextField();
		textCantidadClases.setBounds(458, 39, 86, 20);
		panel.add(textCantidadClases);
		textCantidadClases.setColumns(10);

		JLabel lblHorasSemanales = new JLabel("Horas semanales: ");
		lblHorasSemanales.setBounds(22, 95, 157, 14);
		panel.add(lblHorasSemanales);

		textHotasSemanales = new JTextField();
		textHotasSemanales.setBounds(180, 92, 86, 20);
		textHotasSemanales.setColumns(10);
		panel.add(textHotasSemanales);

		JLabel lblVacantes = new JLabel("Vacantes: ");
		lblVacantes.setBounds(22, 123, 148, 14);
		panel.add(lblVacantes);

		textVacantes = new JTextField();
		textVacantes.setBounds(180, 120, 86, 20);
		textVacantes.setColumns(10);
		panel.add(textVacantes);

		JLabel lblCupoMinimo = new JLabel("Cupo minimo: ");
		lblCupoMinimo.setBounds(22, 151, 129, 14);
		panel.add(lblCupoMinimo);

		textCupo = new JTextField();
		textCupo.setBounds(180, 148, 86, 20);
		textCupo.setColumns(10);
		panel.add(textCupo);

		JLabel lblInstructor = new JLabel("Instructor a cargo: ");
		lblInstructor.setBounds(22, 200, 179, 14);
		panel.add(lblInstructor);

		textInstructor = new JTextField();
		textInstructor.setBounds(215, 197, 86, 20);
		textInstructor.setColumns(10);
		panel.add(textInstructor);

		JLabel lblCursadaDedicadaA = new JLabel("Cursada dedicada a la empresa: ");
		lblCursadaDedicadaA.setBounds(22, 175, 208, 14);
		panel.add(lblCursadaDedicadaA);

		textEmpresa = new JTextField();
		textEmpresa.setBounds(215, 172, 86, 20);
		textEmpresa.setColumns(10);
		panel.add(textEmpresa);

		listHorarios = new JList<Object>();
		listHorarios.setBounds(409, 66, 194, 65);
		panel.add(listHorarios);

		textCurso = new JTextField();
		textCurso.setColumns(10);
		textCurso.setBounds(215, 226, 86, 20);
		panel.add(textCurso);

		JLabel lblNombreDeCurso = new JLabel("Nombre de curso: ");
		lblNombreDeCurso.setBounds(21, 229, 180, 14);
		panel.add(lblNombreDeCurso);

		JLabel lblHorarios = new JLabel("Horarios: ");
		lblHorarios.setBounds(317, 67, 94, 14);
		panel.add(lblHorarios);

		final JButton button = new JButton("Cancelar Cursada");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Estado_Cursada estado = cursada.getEstado();

				if (estado.equals(Estado_Cursada.creado)) {
					cursada.setEstado(Estado_Cursada.cancelado);
					if (comunicationCursada.changeStado(cursada)) {
						ViewDialog dialog = new ViewDialog(DialogTypes.positive, "Se ha cancelado la cursada satisfactoriamente.");
						dialog.setVisible(true);
					} else {
						ViewDialog dialog = new ViewDialog(DialogTypes.Negative, "No se ha podido cancelar la cursada, Intentelo de nuevo  mas tarde.");
						dialog.setVisible(true);
					}

				}

			}
		});
		button.setIcon(new ImageIcon(CursadaPanel.class.getResource("/Icon_/search_16.png")));
		button.setFont(new Font("Tahoma", Font.BOLD, 11));
		button.setBounds(364, 354, 151, 25);
		button.setEnabled(false);
		panel.add(button);

		final JButton button_2 = new JButton("Abrir Cursada");

		button_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Estado_Cursada estado = cursada.getEstado();

				if (estado.equals(Estado_Cursada.creado)) {

					cursada.setEstado(Estado_Cursada.iniciado);

					if (comunicationCursada.changeStado(cursada)) {
						ViewDialog dialog = new ViewDialog(DialogTypes.positive, "Se ha abierto la cursada satisfactoriamente.");
						dialog.setVisible(true);
					} else {
						ViewDialog dialog = new ViewDialog(DialogTypes.Negative, "No se ha podido abrir la cursada, Intentelo de nuevo mas tarde.");
						dialog.setVisible(true);
					}

				}
			}
		});
		button_2.setIcon(new ImageIcon(CursadaPanel.class.getResource("/Icon_/search_16.png")));
		button_2.setFont(new Font("Tahoma", Font.BOLD, 11));
		button_2.setBounds(72, 354, 129, 25);
		button_2.setEnabled(false);
		panel.add(button_2);
		// private Integer vacantes; abrir cursada
		// private Integer cupoMinimo; abrir cursada
		// private Instructor instructor;////// abrir cursada
		// SALA abrir cursada
		// private List<Horario> horarios; abrir cursada
		JButton button_1 = new JButton("Cerrar Inscripcion");
		button_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				button_2.setEnabled(true);
				button.setEnabled(true);

				textVacantes.setEditable(true);
				textCupo.setEditable(true);
				btnSeleccionarInstructor.setVisible(true);
				btnSeleccionarSala.setVisible(true);
				btnSeleccionarHorario.setVisible(true);

			}
		});
		button_1.setIcon(new ImageIcon(CursadaPanel.class.getResource("/Icon_/search_16.png")));
		button_1.setFont(new Font("Tahoma", Font.BOLD, 11));
		button_1.setBounds(206, 354, 153, 25);
		panel.add(button_1);

		btnSeleccionarInstructor = new JButton("Seleccionar Instructor");
		btnSeleccionarInstructor.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnSeleccionarInstructor.setBounds(332, 196, 163, 25);
		btnSeleccionarInstructor.setVisible(false);
		panel.add(btnSeleccionarInstructor);

		textSala = new JTextField();
		textSala.setText((String) null);
		textSala.setEditable(false);
		textSala.setColumns(10);
		textSala.setBounds(215, 257, 86, 20);
		panel.add(textSala);

		JLabel lblSala = new JLabel("Sala: ");
		lblSala.setBounds(21, 260, 180, 14);
		panel.add(lblSala);

		btnSeleccionarSala = new JButton("Seleccionar Sala");
		btnSeleccionarSala.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnSeleccionarSala.setBounds(332, 256, 153, 25);
		btnSeleccionarSala.setVisible(false);
		panel.add(btnSeleccionarSala);

		btnSeleccionarHorario = new JButton("Seleccionar Horario");
		btnSeleccionarHorario.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnSeleccionarHorario.setBounds(409, 147, 153, 25);
		btnSeleccionarHorario.setVisible(false);
		panel.add(btnSeleccionarHorario);

		JPanel buttonPane = new JPanel();
		buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
		getContentPane().add(buttonPane, BorderLayout.SOUTH);
		JButton okButton = new JButton("OK");
		okButton.setActionCommand("OK");
		buttonPane.add(okButton);

		JButton verButton = new JButton("ver");
		verButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				VerAsistencias modelo = new VerAsistencias();
				modelo.setVisible(true);
			}
		});
		verButton.setActionCommand("ver");
		buttonPane.add(verButton);
		getRootPane().setDefaultButton(verButton);
		JButton cancelButton = new JButton("Cancel");
		cancelButton.setActionCommand("Cancel");
		buttonPane.add(cancelButton);

	}

	private void loadData() {

		textCantidadClases.setText(this.cursada.getCantidadClases().toString());
		textCantidadClases.setEditable(false);
		textHotasSemanales.setText(this.cursada.getHorasSemanales().toString());
		textHotasSemanales.setEditable(false);
		textVacantes.setText(this.cursada.getVacantes().toString());
		textVacantes.setEditable(false);
		textCupo.setText(this.cursada.getCupoMinimo().toString());
		textCupo.setEditable(false);
		Instructor instructor = this.cursada.getInstructor();
		textInstructor.setText(Util.obtainName(instructor));
		textInstructor.setEditable(false);
		Empresa empresa = this.cursada.getEmpresa();
		textEmpresa.setText(empresa != null ? empresa.getNombre() : "");
		textEmpresa.setEditable(false);
		textCurso.setText(this.cursada.getCurso().getNombre());
		textCurso.setEditable(false);

		dateInicioCursada.setCalendar(this.cursada.getFechaInicioCursada());
		this.dateInicioCursada.getCalendarButton().setEnabled(false);
		dateFinInscripcion.setCalendar(this.cursada.getFechaFinInscripcion());
		this.dateFinInscripcion.getCalendarButton().setEnabled(false);
		dateInicioInscripcion.setCalendar(this.cursada.getFechaInicioInscripcion());
		this.dateInicioInscripcion.getCalendarButton().setEnabled(false);
		dateFinCursada.setCalendar(this.cursada.getFechaFinCursada());
		this.dateFinCursada.getCalendarButton().setEnabled(false);
		List<Horario> horarioList = cursada.getHorarios();

		Object[] horarios = horarioList != null ? horarioList.toArray() : new Object[0];
		listHorarios.setListData(horarios);
	}
}
